home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Workspace / Locus / Source / IncVersion.m < prev    next >
Text File  |  1995-06-12  |  3KB  |  98 lines

  1.  
  2. /*
  3.     Copyright 1993  Jeremy Slade.  All rights reserved.
  4. */
  5.  
  6. /*
  7.     Project: Locus
  8.  
  9.     File: IncVersion.m
  10.  
  11.     Description:
  12.         This is a short program that reads the version data contained in a NXStringTable format file, and generates an header file from this data, that is then imported by VersionInfo.m, defining the project version information at compile time.
  13.  
  14.     Original Author: Jeremy Slade
  15.  
  16.     Revision History:
  17.         Created
  18.             V.101    JGS    Fri Apr  3 23:53:16 GMT-0700 1992
  19.  
  20. */
  21.  
  22.  
  23. #import <libc.h>
  24. #import <objc/NXStringTable.h>
  25. #import <stdio.h>
  26. #import <streams/streams.h>
  27.  
  28. #define INPUT_FILE        "VersionInfo.data"
  29. #define OUTPUT_FILE    "VersionInfo.data.h"
  30.  
  31.  
  32. void main ( int argc, char *argv[] )
  33. {
  34.     id table;
  35.     NXStream *stream;
  36.     int ReleaseType, MajorVersion, MinorVersion, Revision, VersionNum;
  37.     char buf[40];
  38.     unsigned t;
  39.     
  40.     // Create an NXStringTable from the input file
  41.     if ( !(table = [[NXStringTable alloc] init])
  42.             || !( [table readFromFile:INPUT_FILE]) ) {
  43.         printf ( "IncVersion: error: unable to read input file %s\n", INPUT_FILE );
  44.         exit ( -1 );
  45.     }
  46.     
  47.     // Open a stream to create the output file
  48.     if ( !(stream = NXOpenMemory ( NULL, 0, NX_WRITEONLY )) ) {
  49.         printf ( "IncVersion: error: unable to create ouput stream\n" );
  50.         exit ( -1 );
  51.     }
  52.     
  53.     // Output compile time
  54.     time ( &t );
  55.     strcpy ( buf, ctime ( &t ) );
  56.     buf[strlen(buf)-1] = '\0'; // Remove \n at end of buf
  57.     NXPrintf ( stream, "\n#define V_CompileTime \"Compiled at: %s\"\n\n", buf );
  58.     
  59.     // Get version data from strings in table
  60.     ReleaseType = atoi ( [table valueForStringKey:"V_ReleaseType"] );
  61.     MajorVersion = atoi ( [table valueForStringKey:"V_MajorVersion"] );
  62.     MinorVersion = atoi ( [table valueForStringKey:"V_MinorVersion"] );
  63.     
  64.     // Get Revision number, increment it, and write out the input file
  65.     Revision = atoi ( [table valueForStringKey:"V_Revision"] );
  66.     Revision++;
  67.     sprintf ( buf, "%d", Revision );
  68.     [table insertKey:"V_Revision" value:buf];
  69.     if ( ![table writeToFile:INPUT_FILE] ) {
  70.         printf ( "IncVersion: error: unable to save input file %s\n", INPUT_FILE );
  71.         // Non-fatal error -- keep going
  72.     }
  73.     
  74.     // Compute VersionNum -- add all values together
  75.     VersionNum = Revision;
  76.     VersionNum += MinorVersion * 100;
  77.     VersionNum += MajorVersion * 1000;
  78.     VersionNum += ReleaseType * 10000;
  79.     
  80.     // Output the rest of the data
  81.     NXPrintf ( stream, "#define V_VersionNum %d\n", VersionNum );
  82.     NXPrintf ( stream, "#define V_ReleaseType %d\n", ReleaseType );
  83.     NXPrintf ( stream, "#define V_MajorVersion %d\n", MajorVersion );
  84.     NXPrintf ( stream, "#define V_MinorVersion %d\n", MinorVersion );
  85.     NXPrintf ( stream, "#define V_Revision %d\n", Revision );
  86.     NXPrintf ( stream, "\n\n" );
  87.     
  88.     // Save output file
  89.     if ( NXSaveToFile ( stream, OUTPUT_FILE ) != 0 ) {
  90.         printf ( "IncVersion: error: unable to create output file %s\n", OUTPUT_FILE );
  91.         exit ( -1 );
  92.     }
  93.     NXCloseMemory ( stream, NX_FREEBUFFER );
  94.  
  95.     exit ( 0 );
  96. }
  97.  
  98.